package com.kamistoat.meimeimall.meimeimallproduct.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.kamistoat.meimeimall.common.To.productTo.SpuInfoTo;
import com.kamistoat.meimeimall.common.utils.PageUtils;
import com.kamistoat.meimeimall.meimeimallproduct.entity.SpuInfoEntity;
import com.kamistoat.meimeimall.meimeimallproduct.vo.spuSave.SpuSaveVo;

import java.util.Map;

/**
 * spu信息
 *
 * @author kamistoat
 * @email linjianshanke@163.com
 * @date 2021-09-12 14:28:44
 */
public interface SpuInfoService extends IService<SpuInfoEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 自己编写的方法，保存SpuSaveVo
     * 在这个方法中会调用很多其他Service层的功能，甚至是跨模块的操作
     *
     * @param spuSaveVo 前端的spuSaveVo
     */
    void saveSpuInfo(SpuSaveVo spuSaveVo);

    /**
     * 并非是服务层接口方法，仅仅是在saveSpuInfo中调用
     *
     * @param spuInfoEntity
     */
    void saveBaseSpuInfo(SpuInfoEntity spuInfoEntity);

    /**
     * 自己编写的方法，用于根据三级分类id、品牌id、关键字、商品状态查询Spu
     *
     * @param params 参数，内含分页参数和三级分类id、品牌id、关键字、商品状态
     * @return 分页封装
     */
    PageUtils queryPageBySpuInfo(Map<String, Object> params);

    /**
     * 自己编写的方法，将spu上架
     * 将spu的状态更改为已上架
     * 将spu下的所有sku的对应信息保存到ES中
     * @param spuId spuId
     */
    void spuUp(Long spuId);

    /**
     * 自己编写的方法，将spu下架
     * 将spu的状态更改为已下架
     * 将spu下的所有sku的对应信息从ES中删除
     * @param spuId spuId
     */
    void spuDown(Long spuId);

    /**
     * 带缓查询指定Id的SpuInfo
     */
    SpuInfoTo getSpuInfoById(Long spuId);

    /**
     * 创建测试数据
     * @param spuPerBrand
     */
    void constructTestSpuData(Integer spuPerBrand);
}

